Die Funktion repräsentiert ein Schieberegister für alle möglichen Datentypen (durch Nutzung von Variant).
Es ist möglich die Elemente im Array bufferRegister nach Links (Index array[n]:=array[n+1]) oder Rechts (Index array[n]:=array[n-1]) zu schieben.
Sie kann zum Beispiel zur Materialverfolgung durch eine Maschine und den Prozess genutzt werden, zum Beispiel für Rundschalttische.
bufferRegister.| LGF_ShiftRegister (FB) | ||||||||
|---|---|---|---|---|---|---|---|---|
| Bool | enable | valid | Bool | |||||
| Bool | shiftLeft | busy | Bool | |||||
| Bool | shiftRight | error | Bool | |||||
| UInt | shiftRange | status | Word | |||||
| Bool | reset | leftShiftCount | DInt | |||||
| Bool | clear | rightShiftCount | DInt | |||||
| Bool | fill | shiftOffsetCounter | DInt | |||||
| Variant | initialItem | diagnostics | LGF_typeDiagnostics | |||||
| Variant | bufferRegister | Variant | ||||||
| Bezeichner | Datentyp | Default Wert | Beschreibung |
|---|---|---|---|
| enable | Bool | FALSE | TRUE: Aktiviert die Funktionalität des FB |
| shiftLeft | Bool | FALSE | Positive Flanke: Elemente in `bufferRegister` werden nach links geschoben, von Index `N` nach `N - 1`. Das Element im Index `N = 0` wird überschrieben. |
| shiftRight | Bool | FALSE | Positive Flanke: Elemente in `bufferRegister` werden nach rechts geschoben, von Index `N` nach `N + 1`. Das Element im Index `N = letzter Index` wird überschrieben. |
| shiftRange | UInt | 1 | Anzahl der Plätze, um die die Elemente im Eingangs Array an `bufferRegister` verschoben werden. |
| reset | Bool | FALSE | Puffer initialisieren (Index und Zähler zurücksetzen) |
| clear | Bool | FALSE | Clear / Ablöschen der Elemente in Eingangsarray `bufferRegister` mit `initialItem` |
| fill | Bool | FALSE | Überschreiben der Pufferelemente nach der Schiebeoperation. * `shiftLeft` - die links gelegenen Elemente * `shiftRight` - die rechts gelegenen Elemente werden mit `initalItem` überschrieben. |
| initialItem | Variant | --- | Wert mit dem das Array des Puffers initialisiert wird (meistens: `0` / default wert) |
| Bezeichner | Datentyp | Beschreibung |
|---|---|---|
| valid | Bool | TRUE: Ausgabewerte am FB gültig |
| busy | Bool | TRUE: FB ist aktive und neue Ausgabewerte können erwartet werden. |
| error | Bool | FALSE: Kein Fehler TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten |
| status | Word | 16#0000-16#7FFF: Status des FB 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle) |
| leftShiftCount | DInt | Anzahl der Elemente im Puffer |
| rightShiftCount | DInt | Anzahl der Elemente im Puffer |
| shiftOffsetCounter | DInt | Offset der Schiebeoperationen. `rightShift` - `leftShift` |
| diagnostics | LGF_typeDiagnostics | Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle. |
| Bezeichner | Datentyp | Beschreibung |
|---|---|---|
| bufferRegister | Variant | Puffer / Register Speicher als Array in welchem die Daten gespeichert sind. Die Daten im Register werden nach Links oder Rechts verschoben, abhängig vom Kommando. |
| Code / Wert | Bezeichner / Beschreibung |
|---|---|
| 16#0000 | STATUS_NO_ERROR Status: Abarbeitung ohne Fehler beendet |
| 16#7000 | STATUS_NO_CURRENT_JOBS Status: Keine aktuelle Bearbeitung, initial State |
| 16#7001 | STATUS_FIRST_CALL Erstaufruf nach steigender Flanke |
| 16#7002 | STATUS_SUBSEQUENT_CALL Status: Unteraufruf ohne weitere Detail Information |
| 16#8001 | ERR_BUFFER_EMPTY Fehler: Der Puffer ist leer |
| 16#8002 | ERR_BUFFER_FULL Fehler: Der Puffer ist voll |
| 16#8200 | ERR_NO_ARRAY Fehler: Am Eingang `bufferRegister` liegt kein Array an. |
| 16#8201 | ERR_CLEARING_WITHOUT_INITIAL_ITEM Fehler: Ein Ablöschen des Arrays an `bufferRegister` ohne einen Datenpunkt an `initialItem` ist nicht möglich. |
| 16#8202 | ERR_FILL_WITHOUT_INITIAL_ITEM Fehler: Ein Überschreiben der Arrayelemente an `bufferRegister` mit der Option `fill` ohne einen Datenpunkt an `initialItem` ist nicht möglich. |
| 16#8203 | ERR_WRONG_TYPE_INITIAL_ITEM Fehler: Der Datentyp des Eingangs `initialItem` entspricht nicht dem Datentyp des Arrays am InOut-Parameter `bufferRegister`. |
| 16#8204 | ERR_BOOL_NOT_SUPPORTED Fehler: Boolesche Variablen und Arrays werden von `MOVE_BLOCK_VARIANT` nicht unterstützt. (Verwenden Sie stattdessen einen PLC-Datentyp) |
| 16#8401 | ERR_MULTIPLE_COMMANDS_DEDECTED Fehler: Mehr als ein Kommando an den Eingängen präsent. Nur ein Kommando an den Eingängen `shiftLeft`, `shiftRight` oder `clear` ist zulässig. |
| 16#8402 | ERR_IN_SHIFT_RANGE Fehler: Der Wert an `shiftRange` darf nicht die maximale Größe des Arrays an `bufferRegister` annehmen oder übersteigen. |
| 16#8600 | ERR_UNDEFINED_STATE Fehler: Unbekannter Zustand in der Statemaschine |
| 16#8610 | ERR_CLEAR_BUFFER Fehler: Während des Ablöschens des Puffers in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus` |
| 16#8611 | ERR_SHIFT_BUFFER_LEFT Fehler: Schieben der Elemente nach links fehlgeschlagen, Fehler in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus |
| 16#8612 | ERR_SHIFT_BUFFER_LEFT_FILL Fehler: Überschreiben der Elemente nach Schieben / Links mit dem Initialwort in Funktion `MOVE_BLK_VARIANT` fehlerhaft - weitere Infos in `subFunctionStatus |
| 16#8621 | ERR_SHIFT_BUFFER_RIGHT Fehler: Schieben der Elemente nach rechts fehlgeschlagen, Fehler in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus |
| 16#8622 | ERR_SHIFT_BUFFER_RIGHT_FILL Fehler: Überschreiben der Elemente nach Schieben / Rechts mit dem Initialwort in Funktion `MOVE_BLK_VARIANT` fehlerhaft - weitere Infos in `subFunctionStatus |
Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.
| Bezeichner | Datentyp | Default Wert | Beschreibung |
|---|---|---|---|
| status | Word | 16#0000 | Status des Bausteins oder Fehleridentifikation beim Auftreten des Fehlers |
| subfunctionStatus | Word | 16#0000 | Status oder Rückgabewert von aufgerufenen FB's, FC's und Systembausteinen |
| stateNumber | DInt | 0 | Zustand in der Zustandsmaschine des Blocks, in dem der Fehler aufgetreten ist |
| Version & Datum | Änderungsbeschreibung | |
|---|---|---|
| 1.0.0 | Siemens Industry Online Support | |
| 03.07.2018 | First released version | |
| 3.0.0 | Simatic Systems Support | |
| 09.04.2021 | Refactoring and alignment to Datatype Variant Insert documentation | |
| 4.0.0 | Simatic Systems Support | |
| 04.09.2024 | Rework to PLC Open `Enable` behavior Add `reset` input / counter outputs Fix Bug while filling after left shift operation Rework to diagnostic output datatype | |